Fix registry query fn
authorYehuda Katz + Carl Lerche <engineering@tilde.io>
Tue, 8 Jul 2014 23:28:12 +0000 (16:28 -0700)
committerTim Carey-Smith <tim@spork.in>
Tue, 8 Jul 2014 23:28:12 +0000 (16:28 -0700)
src/cargo/core/dependency.rs
src/cargo/core/registry.rs
src/cargo/core/resolver.rs
src/cargo/core/summary.rs

index a96e895610c4aa619d333606c007bd8e7736cf07..2c5dd06324e3592ae8de6ad499c77a72fb11930d 100644 (file)
@@ -1,4 +1,4 @@
-use core::{VersionReq,SourceId};
+use core::{VersionReq,SourceId,Summary};
 use util::CargoResult;
 
 #[deriving(PartialEq,Clone,Show)]
@@ -45,7 +45,16 @@ impl Dependency {
     }
 
     pub fn is_transitive(&self) -> bool {
-      self.transitive
+        self.transitive
+    }
+
+    pub fn matches(&self, sum: &Summary) -> bool {
+        debug!("self={}; summary={}", self, sum);
+        debug!("   a={}; b={}", self.namespace, sum.get_source_id());
+
+        self.name.as_slice() == sum.get_name() &&
+            self.req.matches(sum.get_version()) &&
+            &self.namespace == sum.get_source_id()
     }
 }
 
index 6a2d6feff3401f4e1d51d99bfeaf227dc9126dce..83cb1c75950c452edd65daeba95ecdaf01cf6298 100644 (file)
@@ -7,9 +7,9 @@ pub trait Registry {
 }
 
 impl Registry for Vec<Summary> {
-    fn query(&mut self, name: &Dependency) -> CargoResult<Vec<Summary>> {
+    fn query(&mut self, dep: &Dependency) -> CargoResult<Vec<Summary>> {
         Ok(self.iter()
-            .filter(|summary| name.get_name() == summary.get_name())
+            .filter(|summary| dep.matches(*summary))
             .map(|summary| summary.clone())
             .collect())
     }
@@ -105,6 +105,13 @@ impl<'a> PackageRegistry<'a> {
             Ok(())
         }).chain_error(|| human(format!("Unable to update {}", namespace)))
     }
+
+    fn query_overrides(&self, dep: &Dependency) -> Vec<Summary> {
+        self.overrides.iter()
+            .filter(|s| s.get_name() == dep.get_name())
+            .map(|s| s.clone())
+            .collect()
+    }
 }
 
 fn dedup(ids: Vec<SourceId>) -> Vec<SourceId> {
@@ -120,7 +127,7 @@ fn dedup(ids: Vec<SourceId>) -> Vec<SourceId> {
 
 impl<'a> Registry for PackageRegistry<'a> {
     fn query(&mut self, dep: &Dependency) -> CargoResult<Vec<Summary>> {
-        let overrides = try!(self.overrides.query(dep)); // this can never fail in practice
+        let overrides = self.query_overrides(dep);
 
         if overrides.is_empty() {
             // Ensure the requested namespace is loaded
index 968fec3dc6fc1ce1127a95106f69cd15ee45c7c4..6a50c71084b898b79bf139ef092d0b318bb290e0 100644 (file)
@@ -97,7 +97,7 @@ mod test {
     )
 
     fn registry_loc() -> SourceId {
-        let remote = Location::parse("http://www.example.com/").unwrap();
+        let remote = Location::parse("http://example.com").unwrap();
         SourceId::new(RegistryKind, remote)
     }
 
index 5d86a3e8d0d0f45528ef42519ca72ce6ac738de5..fcad56a2f69e4c0d911ce48993ba455552817a09 100644 (file)
@@ -1,7 +1,8 @@
 use semver::Version;
 use core::{
     Dependency,
-    PackageId
+    PackageId,
+    SourceId
 };
 
 /// Summaries are cloned, and should not be mutated after creation
@@ -31,6 +32,10 @@ impl Summary {
         self.get_package_id().get_version()
     }
 
+    pub fn get_source_id<'a>(&'a self) -> &'a SourceId {
+        self.package_id.get_source_id()
+    }
+
     pub fn get_dependencies<'a>(&'a self) -> &'a [Dependency] {
         self.dependencies.as_slice()
     }